<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>原生JS实现购物车结算功能代码</title>
    <link rel="stylesheet" href="../css/style.css" />
    <script src="../js/jquery-3.6.0.min.js"></script>
</head>

<body>
    <div class="catbox">
        <table id="cartTable">
            <thead>
                <tr>
                    <th><label>
                            <input class="check-all check" type="checkbox" />&nbsp;&nbsp;全选</label></th>
                    <th>商品</th>
                    <th>单价</th>
                    <th>数量</th>
                    <th>小计</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
                    <td class="goods"><img src="../images/1.jpg" alt="" /><span>Casio/卡西欧 EX-TR350</span></td>
                    <td class="price">5999.88</td>
                    <td class="count"><span class="reduce"></span>
                        <input class="count-input" type="text" value="1" />
                        <span class="add">+</span>
                    </td>
                    <td class="subtotal">5999.88</td>
                    <td class="operation"><span class="delete">删除</span></td>
                </tr>
                <tr>
                    <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
                    <td class="goods"><img src="../images/2.jpg" alt="" /><span>Canon/佳能 PowerShot SX50 HS</span></td>
                    <td class="price">3888.50</td>
                    <td class="count"><span class="reduce"></span>
                        <input class="count-input" type="text" value="1" />
                        <span class="add">+</span>
                    </td>
                    <td class="subtotal">3888.50</td>
                    <td class="operation"><span class="delete">删除</span></td>
                </tr>
                <tr>
                    <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
                    <td class="goods"><img src="../images/3.jpg" alt="" /><span>Sony/索尼 DSC-WX300</span></td>
                    <td class="price">1428.50</td>
                    <td class="count"><span class="reduce"></span>
                        <input class="count-input" type="text" value="1" />
                        <span class="add">+</span>
                    </td>
                    <td class="subtotal">1428.50</td>
                    <td class="operation"><span class="delete">删除</span></td>
                </tr>
                <tr>
                    <td class="checkbox"><input class="check-one check" type="checkbox" /></td>
                    <td class="goods"><img src="../images/4.jpg" alt="" /><span>Fujifilm/富士 instax mini 25</span></td>
                    <td class="price">640.60</td>
                    <td class="count"><span class="reduce"></span>
                        <input class="count-input" type="text" value="1" />
                        <span class="add">+</span>
                    </td>
                    <td class="subtotal">640.60</td>
                    <td class="operation"><span class="delete">删除</span></td>
                </tr>
            </tbody>
        </table>
        <div class="foot" id="foot">

            <a class="fl" id="deleteAll" href="javascript:;">删除选中的商品</a>

            <a class="fl" id="clearAll" href="javascript:;">清理购物车</a>
            <div class="fr closing" onclick="getTotal();">结 算</div>
            <input type="hidden" id="cartTotalPrice" />
            <div class="fr total">合计：￥<span id="priceTotal">0.00</span></div>
            <div class="fr selected" id="selected">已选商品<span id="selectedTotal">0</span>件<span
                    class="arrow up">︽</span><span class="arrow down">︾</span></div>
            <div class="selected-view">
                <div id="selectedViewList" class="clearfix">
                    <div><img src="../images/1.jpg"><span>取消选择</span></div>
                </div>
                <span class="arrow">◆<span>◆</span></span>
            </div>
        </div>
    </div>
</body>
<script>
    // 全选
    $(".check-all").click(function () {
        // var status = this.checked;
        var status = $(this).prop("checked");
        console.log(status);
        $(".check-one").prop("checked", status);
        getTotal();
    })

    // 反选 
    $(".check-one").click(function () {
        // var flag = true;
        // $(".check-one").each(function () {
        //     if ($(this).prop("checked") == false) {
        //         flag = false;
        //     }
        // })
        // $(".check-all").prop("checked", flag);

        // var flag = $(".check-one").length == $(".check-one:checked").length ? true : false;
        // $(".check-all").prop("checked", flag);

        // var flag = $(".check-one").is(":not(:checked)")  // 是否存在未被选中的 (true:存在 false:不存在)
        // $(".check-all").prop("checked", !flag);


        // var sum = 0;
        // var allPrice = 0;
        // $(".check-one:checked").parents("tr").each(function () {
        //     var num = $(this).find(".count-input").val() * 1;
        //     var subtotal = $(this).find(".subtotal").text() * 1;
        //     console.log(num, subtotal);
        //     sum += num;
        //     allPrice += subtotal;
        // })

        // $("#selectedTotal").text(sum);
        // $("#priceTotal").text(allPrice.toFixed(2));
        isAllChecked();
        getTotal();

    })

    $(".add").click(function () {
        var num = $(this).prev().val();
        num++;
        $(this).prev().val(num);

        var price = $(this).parent().prev().text();
        var subtotal = (price * num).toFixed(2);
        $(this).parent().next().text(subtotal)

        $(this).prevAll(".reduce").text("-");
        getTotal();

    })

    $(".reduce").click(function () {
        var num = $(this).next().val();
        if (num <= 1) return false;
        num--;
        if (num == 1) $(this).text("");
        $(this).next().val(num);

        var price = $(this).parent().prev().text();
        var subtotal = (price * num).toFixed(2);
        $(this).parent().next().text(subtotal)
        getTotal();
    })

    $(".delete").click(function () {
        if (confirm("是否删除当前商品?")) {
            $(this).parents("tr").remove();
            isAllChecked();
            getTotal();
        }
    })

    $("#deleteAll").click(function () {
        if (confirm("是否删除选中商品?")) {
            $(".check-one:checked").parents("tr").remove();
            isAllChecked();
            getTotal();
        }
    })
    $("#clearAll").click(function () {
        if (confirm("是否清空购物车?")) {
            $(".check-one").parents("tr").remove();
            isAllChecked();
            getTotal();
        }
    })

    function isAllChecked() {
        var flag = $(".check-one").is(":not(:checked)")  // 是否存在未被选中的 (true:存在 false:不存在)

        $(".check-all").prop("checked", $(".check-one").length == 0 ? false : !flag);
    }


    function getTotal() {
        var sum = 0;
        var allPrice = 0;
        $(".check-one:checked").parents("tr").each(function () {
            var num = $(this).find(".count-input").val() * 1;
            var subtotal = $(this).find(".subtotal").text() * 1;
            console.log(num, subtotal);
            sum += num;
            allPrice += subtotal;
        })

        $("#selectedTotal").text(sum);
        $("#priceTotal").text(allPrice.toFixed(2));
    }

</script>

</html>